package com.yuw.dz.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 进行jdbc连接数据库的测试工作
 * 使用main方法先行测试jdbc对于数据库操作
 */
public class DBTestDriver {
    public static void main(String[] args) {
        System.out.println("========================jdbc连接数据库操作============================");
        // （1）注册或者实例化jdbc的驱动类；
        // 提供jdbc连接数据库的 url字符串、数据库驱动类名、用户名、密码
        // jdbc:mysql 固定格式 ； localhost ：表示的是数据库服务器的访问地址（主机名、ip，其中localhost、127.0.0.1表示本机）
        // 3306 ：mysql数据库的默认的监听客户端的端口号；端口后面是要连接的数据库名(写入自己的数据名)
        String strUrl = "jdbc:mysql://localhost:3306/javaweb202003?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false"; // url连接串
        String strDBDriverType = "com.mysql.cj.jdbc.Driver"; // 数据库驱动类名
        String strUserName = "root"; // 用户名
        String strUserPsw = "root"; // 密码

        try {
            // 加载数据库驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");  // 固定写法（反射）

            // （2）获取数据库的连接对象Connection；
            Connection conn = DriverManager.getConnection(strUrl, strUserName, strUserPsw);

            // （3）获取数据库的操作对象Statement（查询器）；【执行增删改查】
            Statement st = conn.createStatement();

            // （4）执行SQL语句，获取数据操作结果或者结果集对象ResultSet；
            String strSql = "SELECT * FROM userinfo"; // sql语句先进行调试，在写入java程序
            // 获取查询结果
            ResultSet rs = st.executeQuery(strSql);
            // 查询完成以后，释放statement查询器的资源
            //st.close();
            //conn.close();
            //（5）解析结果集对象ResultSet，进行相关业务逻辑处理；
            // 使用wile循环进行ResultSet的解析
            // next方法用于判断，在查询结果集中有没有下一条记录，在开始之前，next方法是定位在第一条记录之前的位置；
            while (rs.next()) {
                // 可以从ResultSet中取出当前行的数据内容
                System.out.print("    " + rs.getObject(1));
                System.out.print("    " + rs.getObject(2));
                System.out.print("    " + rs.getObject(3));
                System.out.println();
            }
            System.out.println("再次遍历ResultSet的结果集内容：");

            // 再次 遍历输出ResultSet的数据内容 （默认不能再次遍历）
            while (rs.next()) {
                // 可以从ResultSet中取出当前行的数据内容
                System.out.println(rs.getObject(2));
            }
        } catch (Exception e) {
            System.out.println("JDBC执行过程异常：JDBC驱动无法访问");
        }


    }
}
